#ifndef _COMMON_H_
#define _COMMON_H_

#include <string.h>
#include <stdio.h>
#include <errno.h>
#include "BufferCircularCamiones.h"
#include "zooErrno.h"

// Path utilizado para inicializar los semáforos a través de la función ftok()
#define DIRECTORY "/media"

// Ids de los IPCs
#define ID_SEMCONTROL					1	
#define ID_SEMTRUCKDOOR					2
#define ID_SEMTRUCK						3
#define ID_SHMEM						4
#define ID_Q_TRUCK_DOOR_INPUT   		5
#define ID_Q_TRUCK_DOOR_OUTPUT   		6
#define ID_Q_TRUCK_CHARGE_INPUT   		7
#define ID_Q_TRUCK_CHARGE_OUTPUT   		8
#define ID_Q_TRUCK_DISCHARGE_INPUT   	9
#define ID_Q_TRUCK_DISCHARGE_OUTPUT   	10
#define ID_Q_CHARGE_TO_TRUCK			11

#define ZOO_MAX						200 // No voy usar este dato en este problema
#define CANT_DOORS					3
#define TRUCK_CAPACITY				10

// Flags
#define _DEBUG


typedef struct
{
	// Valor que modifican los camiones para indicar cuantos lugares quedan
	// en el camión
	int capacidadSala;
	int camionEnSala;
	int cantidadPersonasEnCamion;
	// Cantidad de personas que entraron a la sala
	int cantidadDePersonas;
	bool puertaCamionBloqueada[CANT_DOORS];
	BufferCircularCamiones camionesBloqueados;
} ControlData;

// Estructura de los mensajes enviados por los procesos Persona-Puerta
typedef struct
{
	// El ID de este mensaje es el nro de puerta
	long mtype;
	long idPersona; // Esto es el ticket
	
} TruckDoorInputMsg;


typedef struct
{
	long mtype;
	char msg[30];
} TruckDoorOutputMsg;

// Estructura de los mensajes enviados por los procesos Persona-Camion
typedef struct
{
	// El ID de este mensaje es el nro de puerta
	long mtype;
	long idPersona; // Esto es el ticket
	
} TruckInputMsg;

// Estructura de los mensajes enviados por los procesos Persona
typedef struct
{
	long mtype;
	int nroCamion;
} TruckOutputMsg;

// Cola en la cual la puerta va cargando a las personas que va a subir el camión
typedef struct
{
	long mtype;
	long idPersona;
} ChargeToTruckMsg;

#endif
